var express = require('express');
var router = express.Router();
const Users = require('../datas/users');

/* GET 登录页面 */
router.get('/', function(req, res, next) {
  res.send('login');
});

/* POST 验证手机号是否已注册 */
router.post('/verify/phone', async function(req, res, next) {
  try {
    const { phone } = req.body;

    // 验证必填字段
    if (!phone) {
      return res.status(400).json({
        success: false,
        message: '手机号是必填项'
      });
    }

    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phone)) {
      return res.status(400).json({
        success: false,
        message: '手机号格式不正确'
      });
    }

    // 查找用户
    const user = await Users.findOne({ phone: phone });
    
    res.status(200).json({
      success: true,
      message: '验证完成',
      data: {
        isRegistered: !!user,
        phone: phone
      }
    });

  } catch (error) {
    console.error('手机号验证失败:', error);
    res.status(500).json({
      success: false,
      message: '服务器错误，验证失败',
      error: error.message
    });
  }
});

/* POST 发送验证码 */
router.post('/send-verification-code', async function(req, res, next) {
  try {
    const { phone, type } = req.body;

    // 验证必填字段
    if (!phone || !type) {
      return res.status(400).json({
        success: false,
        message: '手机号和类型都是必填项'
      });
    }

    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phone)) {
      return res.status(400).json({
        success: false,
        message: '手机号格式不正确'
      });
    }

    // 如果是重置密码，验证用户是否存在
    if (type === 'reset_password') {
      const user = await Users.findOne({ phone: phone });
      if (!user) {
        return res.status(404).json({
          success: false,
          message: '该手机号未注册'
        });
      }
    }

    // 生成6位验证码
    const verificationCode = Math.floor(100000 + Math.random() * 900000).toString();
    
    // 这里应该调用短信API发送验证码，暂时只在服务器端打印
    console.log(`📱 发送验证码到 ${phone}: ${verificationCode} (类型: ${type})`);
    
    // 实际项目中应该将验证码存储到缓存（如Redis）中，设置5分钟过期时间
    // 这里暂时模拟成功发送
    
    res.status(200).json({
      success: true,
      message: '验证码已发送',
      data: {
        // 开发环境下返回验证码，生产环境不应该返回
        verificationCode: process.env.NODE_ENV === 'development' ? verificationCode : undefined
      }
    });

  } catch (error) {
    console.error('发送验证码失败:', error);
    res.status(500).json({
      success: false,
      message: '服务器错误，发送失败',
      error: error.message
    });
  }
});

/* POST 重置密码 */
router.post('/reset-password', async function(req, res, next) {
  try {
    const { phone, newPassword } = req.body;

    // 验证必填字段
    if (!phone || !newPassword) {
      return res.status(400).json({
        success: false,
        message: '手机号和新密码都是必填项'
      });
    }

    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phone)) {
      return res.status(400).json({
        success: false,
        message: '手机号格式不正确'
      });
    }

    // 验证密码强度
    const passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$/;
    if (!passwordRegex.test(newPassword)) {
      return res.status(400).json({
        success: false,
        message: '密码至少6位，需包含字母和数字'
      });
    }

    // 查找用户
    const user = await Users.findOne({ phone: phone });
    if (!user) {
      return res.status(404).json({
        success: false,
        message: '用户不存在'
      });
    }

    // 更新密码
    const result = await Users.updateOne(
      { phone: phone },
      { password: newPassword, updatedAt: new Date() }
    );

    if (result.modifiedCount === 0) {
      return res.status(500).json({
        success: false,
        message: '密码重置失败'
      });
    }

    console.log(`🔑 用户 ${phone} 密码重置成功`);

    res.status(200).json({
      success: true,
      message: '密码重置成功',
      data: {
        phone: phone
      }
    });

  } catch (error) {
    console.error('密码重置失败:', error);
    res.status(500).json({
      success: false,
      message: '服务器错误，重置失败',
      error: error.message
    });
  }
});

/* POST 手机号密码登录 */
router.post('/phone', async function(req, res, next) {
  try {
    const { phone, password } = req.body;

    // 验证必填字段
    if (!phone || !password) {
      return res.status(400).json({
        success: false,
        message: '手机号和密码都是必填项'
      });
    }

    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phone)) {
      return res.status(400).json({
        success: false,
        message: '手机号格式不正确'
      });
    }

    // 查找用户
    const user = await Users.findOne({ phone: phone });
    if (!user) {
      return res.status(401).json({
        success: false,
        message: '手机号未注册'
      });
    }

    // 验证密码（注意：实际项目中密码应该是加密存储的）
    if (user.password !== password) {
      return res.status(401).json({
        success: false,
        message: '密码错误'
      });
    }

    // 登录成功，返回用户信息（不包含密码）
    res.status(200).json({
      success: true,
      message: '登录成功',
      data: {
        id: user._id,
        username: user.username,
        phone: user.phone,
        hasImage: !!user.image,
        createdAt: user.createdAt
      }
    });

  } catch (error) {
    console.error('登录失败:', error);
    res.status(500).json({
      success: false,
      message: '服务器错误，登录失败',
      error: error.message
    });
  }
});

module.exports = router;
